home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Experimental BBS Explossion 3
/
Experimental BBS Explossion III.iso
/
c
/
vgagraph.zip
/
PALETTE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-06
|
2KB
|
101 lines
#include <dos.h>
void setpalette(int ws,char b1,char b2,char b3)
{
asm{
mov ah,10h
mov al,10h
mov bx,ws
mov ch,b1
mov cl,b2
mov dh,b3
int 10h
}
}
void readallpalette(char pal[])
{
unsigned int segpal,ofspal;
ofspal=FP_OFF(pal);
segpal=FP_SEG(pal);
asm{
mov dx,03DAh
}
SS1: asm{
in al,dx
test al,8
je SS1
mov ax,segpal
mov es,ax
mov dx,ofspal
mov bx,1
mov cx,256
mov ax,0x1017
int 0x10
}
}
void setallpalette(char pal[])
{
unsigned int segpal,ofspal;
ofspal=FP_OFF(pal);
segpal=FP_SEG(pal);
asm{
push ds
mov dx,03DAh
}
SS2: asm{
in al,dx
test al,8
je SS2
mov dx,03C8h
mov al,1
out dx,al
mov ax,segpal
mov ds,ax
mov si,ofspal
mov cx,384
mov dx,03C9h
rep outsb
mov cx,381
mov dx,03DAh
}
SS020:asm{
in al,dx
test al,8
je SS020
mov dx,03C9h
rep outsb
pop ds
}
}
void changepalette(char k,char palfrom[],char palto[])
{
int i,j,n;
char pall[768];
char pals[768];
char pal[768];
char yes;
for (i=0;i<768;i++) pall[i]=palfrom[i];
for (i=0;i<768;i++) pals[i]=palto[i];
for (i=0;i<768;i++) pal[i]=pall[i];
n=767;
L: yes=0;
for (i=0;i<n;i++)
{
if (pal[i]>pals[i])
{
if (pal[i]-pals[i]>k) pal[i]=pal[i]-k-1; else pal[i]=pals[i];
yes=1;
}
if (pal[i]<pals[i])
{
if (pals[i]-pal[i]>k)pal[i]=pal[i]+k+1; else pal[i]=pals[i];
yes=1;
}
}
setallpalette(pal);
if (yes==1) goto L;
}